package com.prj.ufdm.cloud.ms.auth.api;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.alibaba.fastjson.JSONObject;
import com.prj.ufdm.cloud.base.dto.RetData;
import com.prj.ufdm.cloud.base.exception.BaseException;
import com.prj.ufdm.cloud.base.util.BaseStringUtil;
import com.prj.ufdm.cloud.base.util.BaseUuidUtil;
import com.prj.ufdm.cloud.ms.auth.bpo._impl.SysFunctionBPOImpl;
import com.prj.ufdm.cloud.ms.auth.enums.AuthRetCodeEnum;
import com.prj.ufdm.cloud.ms.auth.model.SysFunction;


/**
 * 系统功能控制类
 * @author 胡义振  
 * @date 2018年3月26日
 */
@RequestMapping(value = "/api/auth/sysfun")
@Controller
public class SysFunctionController {
	
	@Autowired
	SysFunctionBPOImpl sysFunctionBPO;
	
	/**
	 * 查询所有系统功能
	 * @return
	 * @author 胡义振  
	 * @date 2018年3月26日
	 */
	@RequestMapping(value = "/doGetFunctionList")
	@ResponseBody
	public RetData<List<SysFunction>> doGetFunctionList(SysFunction sysFunction) throws Exception {
		RetData<List<SysFunction>> retData = new RetData<List<SysFunction>>();
		retData.setRetBody(sysFunctionBPO.doGetFunctionList(sysFunction));
		return retData; 
	}
	
	/**
	 * 查询所有系统功能（JSON格式层次结构）
	 * @return 
	 * @author 胡义振  
	 * @date 2018年3月26日
	 */
	@RequestMapping(value = "/doGetLayerFunctionObject")
	@ResponseBody
	public RetData<List<JSONObject>> doGetLayerFunctionObject(SysFunction sysFunction) throws Exception {
		RetData<List<JSONObject>> retData = new RetData<List<JSONObject>>();
		List<SysFunction> listSysFunction = sysFunctionBPO.doGetFunctionList(sysFunction);
		retData.setRetBody(sysFunctionBPO.doExchangeFunctionListToJson(listSysFunction));
		return retData;
	}
	
	
	/**
	 * 根据角色ID查询系统功能
	 * @return
	 * @author 胡义振  
	 * @date 2018年3月26日
	 */
	@RequestMapping(value = "/doGetFunctionListByRoleId")
	@ResponseBody
	public RetData<List<SysFunction>> doGetFunctionListByRoleId(String roleId) throws Exception {
		RetData<List<SysFunction>> retData = new RetData<List<SysFunction>>();
		retData.setRetBody(sysFunctionBPO.doGetFunctionListByRoleId(roleId));
		return retData;
	}
	
	/**
	 * 根据角色ID查询系统功能（JSON格式层次结构）
	 * @return
	 * @author 胡义振  
	 * @date 2018年3月26日
	 */
	@RequestMapping(value = "/doGetLayerFunctionListByRoleId")
	@ResponseBody
	public RetData<List<JSONObject>> doGetLayerFunctionListByRoleId(String roleId) throws Exception {
		RetData<List<JSONObject>> retData = new RetData<List<JSONObject>>();
		List<SysFunction> listSysFunction = sysFunctionBPO.doGetFunctionListByRoleId(roleId);
		retData.setRetBody(sysFunctionBPO.doExchangeFunctionListToJson(listSysFunction));
		return retData;
	}
	
	/**
	 * 保存系统功能
	 * @return
	 * @author 胡义振  
	 * @date 2018年3月26日
	 */
	@RequestMapping(value = "/doSaveFunction")
	@ResponseBody
	public RetData<String> doSaveFunction(SysFunction sysFunction) throws Exception {
		RetData<String> retData = new RetData<String>();
		//菜单名称不能为空
		if(sysFunction==null || "".equals(BaseStringUtil.replaceAllBlank(sysFunction.getFunctionName()))) {
			throw new BaseException(AuthRetCodeEnum.RET_CODE_0103004.getCode(),AuthRetCodeEnum.RET_CODE_0103004.getMessage());
		}	
		//菜单url不能为空
		if(sysFunction==null || "".equals(BaseStringUtil.replaceAllBlank(sysFunction.getFunctionUrl()))) {
			throw new BaseException(AuthRetCodeEnum.RET_CODE_0103005.getCode(),AuthRetCodeEnum.RET_CODE_0103005.getMessage());
		}
		// 菜单名称已存在
		if (sysFunctionBPO.doCheckSysFunctionNameExist(sysFunction.getFunctionName(), "")) {
			throw new BaseException(AuthRetCodeEnum.RET_CODE_0103008.getCode(),AuthRetCodeEnum.RET_CODE_0103008.getMessage());
		}
		sysFunction.setId(BaseUuidUtil.getUUID());
		sysFunctionBPO.doSave(sysFunction);
		return retData;
	}
	
	/**
	 * 修改系统功能
	 * @return
	 * @author 胡义振  
	 * @date 2018年3月26日
	 */
	@RequestMapping(value = "/doModFunction")
	@ResponseBody
	public RetData<String> doModFunction(SysFunction sysFunction) throws Exception {
		RetData<String> retData = new RetData<String>();
		sysFunctionBPO.doModById(sysFunction);
		return retData;
	}
	
	/**
	 * 删除系统功能
	 * @return
	 * @author 胡义振  
	 * @date 2018年3月26日
	 */
	@RequestMapping(value = "/doDelFunction")
	@ResponseBody
	public RetData<String> doDelFunction(String id) throws Exception {
		RetData<String> retData = new RetData<String>();
		sysFunctionBPO.doRmFunctionById(id);
		return retData;
	}
	
	
}
